class CategoriaController < ApplicationController

  #active_scaffold :Categoria
  before_filter :login_required

  def index
    redirect_to :action => :show
  end
  
  def show
    @categorias = Categoria.find(:all)
    @categoria = Categoria.find(:first)
    # select according to your choice...
    #this item will be selected node by default in the tree when it will first be loaded.
  end

  def mostrar_categoria
    # this action will handle the two way syncronization...all the tree nodes(items) will be linked
    # to this action to show the detailed item on the left of the tree when the item is clicked
    # from the tree
    if request.xhr?
      @categoria = Categoria.find(params[:id]) rescue nil
      if @categoria
        # the code below will render all your RJS code inline and
        # u need not to have any .rjs file, isnt this interesting
        render :update do |page|
          CategoriaController::mostrar_categoria(page,@categoria)
        end
      else
        return render(:nothing => true)
      end
    end
  end

  def mostrar_conteudos
    if request.xhr?
      @categoria = Categoria.find(params[:id]) rescue nil
      render :update do |page|
        page.hide "categoria_selecionada"
        page.replace_html "categoria_selecionada", :partial=>"categoria/categoria2", :object=>@categoria
        page.visual_effect 'toggle_appear', "categoria_selecionada"
      end
    end
  end

  def criar
    categoria_mae = Categoria.find(params[:parent_id])
    begin
      @categoria=categoria_mae.criar_filha(params[:categoria_filha])
	    html_arvore = render_component_as_string(
						:controller=>"categoria",
						:action=>"mostrar_arvore",
						:params=>{:categoria=>@categoria})
	    msg = "Categoria Filha Criada com Sucesso"
	    sucesso = true
    rescue StandardError => exc
      msg = "Problemas na Criacao da Categoria Filha - #{exc}"
	    sucesso = false
    end
    render :update do |page|
      if sucesso
        page.replace_html "ajaxtree", html_arvore
      end
      CategoriaController::mostrar_mensagem(page,msg)
    end
  end

  def remover
    begin
        @categoria = Categoria.find(params[:id])
	@categoria.destroy
	msg = "Categoria Removida"
	@categoria = Categoria.find(@categoria.parent_id)
	html_arvore = render_component_as_string(
						:controller=>"categoria",
						:action=>"mostrar_arvore",
						:params=>{:categoria=>@categoria})
        sucesso = true
    rescue 
        msg = "Problemas na Remocao da Categoria"
	sucesso = false
    end
    render :update do |page|
      if sucesso
        page.replace_html "ajaxtree", html_arvore
      end
      CategoriaController::mostrar_mensagem(page,msg)
    end
  end

  def renomear
    @categoria = Categoria.find(params[:id])
    if @categoria.update_attributes(params[:categoria])
      msg = 'Nome Alterado.'
    else
      msg = 'Erro na alteracao.'
    end
    html_arvore = render_component_as_string(
			:controller=>"categoria",
			:action=>"mostrar_arvore",
			:params=>{:categoria=>@categoria})
    render :update do |page|
	    CategoriaController::mostrar_mensagem(page,msg)
      CategoriaController::mostrar_arvore(page,@categoria)
	    categorias=Categoria.find(:all)
	    page.replace_html "ajaxtree", html_arvore
	    CategoriaController::mostrar_categoria(page,@categoria)
    end
  end

  def mover_categoria
    if request.xhr?
      if @categoria = Categoria.find(params[:id].split("_").first) rescue nil
        @categoria_mae = Categoria.find(params[:parent_id]) rescue nil
	      @categoria.move_to_child_of @categoria_mae
	      html_arvore = render_component_as_string(
						:controller=>"categoria",
						:action=>"mostrar_arvore",
						:params=>{:categoria=>@categoria})
        render :update do |page|
	        msg = "Categoria "+@categoria.nome+" movida para ser filha de "+@categoria_mae.nome
          CategoriaController::mostrar_mensagem(page,msg)
          page.replace_html "ajaxtree", html_arvore
          CategoriaController::mostrar_categoria(page,@categoria)
        end
      else
        return render(:nothing => true)
      end
    end
  end

  def mostrar_arvore
    categorias = ( params.has_key?('categorias') ) ? params[:categorias] : categorias = Categoria.find(:all)
    arrastavel = ( params.has_key?('arrastavel') ) ? params[:arrastavel] : arrastavel = true
    # se passado um true para link_conteudo, gera um link para o node da arvore diferente, para preencher o campo da categoria do conteudo no formul�rio dos conteudos.
    link_conteudo = ( params.has_key?('link_conteudo') ) ? params[:link_conteudo] : link_conteudo = false
    render :partial=>"categoria/mostrar_arvore", 
           :locals=>{
	     :categoria=>params[:categoria],
	     :categorias=>categorias,
	     :arrastavel=>arrastavel,
	     :link_conteudo=>link_conteudo
	  }
  end


  def self.mostrar_arvore(page,categoria)
    
  end

  def self.mostrar_mensagem(page,msg)
    page.replace_html :resultado , msg
    page.visual_effect('highlight', "resultado", :duration => 2.7)
  end

  def self.mostrar_categoria(page,categoria)
    page.hide "categoria_selecionada"
    page.replace_html "categoria_selecionada", :partial=>"categoria/categoria", :object=>categoria
    page.visual_effect 'toggle_appear', "categoria_selecionada"
  end

end